using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IntelligenceTools._Movement
{
    /// <summary>
    /// <para>Find Meeting Locations</para>
    /// <para>Identifies  locations where multiple unique movement tracks have dwelled for a defined time period.</para>
    /// <para>标识在定义的时间段内驻留了多个唯一移动轨迹的位置。</para>
    /// </summary>    
    [DisplayName("Find Meeting Locations")]
    public class FindMeetingLocations : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public FindMeetingLocations()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input movement track points that will be analyzed for possible meeting locations. This layer must be time enabled.</para>
        /// <para>将分析可能的会议地点的输入移动跟踪点。此图层必须启用时间。</para>
        /// </param>
        /// <param name="_out_area_features">
        /// <para>Output Area Features</para>
        /// <para>The output area features that represent the extent of the identified meeting location.</para>
        /// <para>表示已识别会议地点范围的输出区域要素。</para>
        /// </param>
        /// <param name="_out_point_features">
        /// <para>Output Point Features</para>
        /// <para>The output point features that represent the centroid of the area of the individual meeting. Multiple meetings can occur at a given meeting location. This feature class contains all of the details regarding the individual meetings including participants, duration, and start and end times.</para>
        /// <para>表示单个会议区域质心的输出点要素。在给定的会议地点可以召开多个会议。此要素类包含有关各个会议的所有详细信息，包括参与者、持续时间以及开始和结束时间。</para>
        /// </param>
        /// <param name="_unique_name_field">
        /// <para>In Features Name Field</para>
        /// <para>The field containing the unique identifiers for movement track points.</para>
        /// <para>包含移动轨迹点的唯一标识符的字段。</para>
        /// </param>
        public FindMeetingLocations(object _in_features, object _out_area_features, object _out_point_features, object _unique_name_field)
        {
            this._in_features = _in_features;
            this._out_area_features = _out_area_features;
            this._out_point_features = _out_point_features;
            this._unique_name_field = _unique_name_field;
        }
        public override string ToolboxName => "Intelligence Tools";

        public override string ToolName => "Find Meeting Locations";

        public override string CallName => "intelligence.FindMeetingLocations";

        public override List<string> AcceptEnvironments => ["extent", "outputCoordinateSystem", "parallelProcessingFactor", "workspace"];

        public override object[] ParameterInfo => [_in_features, _out_area_features, _out_point_features, _unique_name_field, _search_distance, _minimum_loiter_time];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input movement track points that will be analyzed for possible meeting locations. This layer must be time enabled.</para>
        /// <para>将分析可能的会议地点的输入移动跟踪点。此图层必须启用时间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Output Area Features</para>
        /// <para>The output area features that represent the extent of the identified meeting location.</para>
        /// <para>表示已识别会议地点范围的输出区域要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Area Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_area_features { get; set; }


        /// <summary>
        /// <para>Output Point Features</para>
        /// <para>The output point features that represent the centroid of the area of the individual meeting. Multiple meetings can occur at a given meeting location. This feature class contains all of the details regarding the individual meetings including participants, duration, and start and end times.</para>
        /// <para>表示单个会议区域质心的输出点要素。在给定的会议地点可以召开多个会议。此要素类包含有关各个会议的所有详细信息，包括参与者、持续时间以及开始和结束时间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Point Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_point_features { get; set; }


        /// <summary>
        /// <para>In Features Name Field</para>
        /// <para>The field containing the unique identifiers for movement track points.</para>
        /// <para>包含移动轨迹点的唯一标识符的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("In Features Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _unique_name_field { get; set; }


        /// <summary>
        /// <para>Search Distance</para>
        /// <para>The maximum distance a movement track can loiter before it is no longer considered part of a meeting. The default is 100 meters.</para>
        /// <para>移动轨迹在不再被视为会议的一部分之前可以徘徊的最大距离。默认值为 100 米。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Search Distance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _search_distance { get; set; } = "100 Meters";


        /// <summary>
        /// <para>Minimum Loiter Time</para>
        /// <para>The minimum amount of time a movement track point can loiter in an area before it is considered to be dwelling. This helps identify possible meeting locations where multiple unique movement tracks are dwelling in the same time and space. The default is 10 minutes.</para>
        /// <para>移动轨迹点在被视为居住之前可以在某个区域徘徊的最短时间。这有助于确定可能在同一时间和空间中驻留多个独特运动轨迹的可能会议地点。默认值为 10 分钟。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Loiter Time")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _minimum_loiter_time { get; set; } = null;


        public FindMeetingLocations SetEnv(object extent = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object workspace = null)
        {
            base.SetEnv(extent: extent, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, workspace: workspace);
            return this;
        }

    }

}